package com.whut.monitor.util;

import static com.whut.monitor.util.FileUtil.show;
import static java.lang.Math.abs;

/**
 * @author Sandeepin
 *         2017/11/20 0020
 */
public class AlgorithmUtil {

    // 数据清洗(设定阈值内数据，前一个值覆盖后一个值)
    /**
     * 数据清洗(设定阈值内数据，前一个值覆盖后一个值)
     *
     * @param mat 输入矩阵
     * @return 布尔
     */
    public static boolean dataClean(String[][] mat) {
        int rows = mat.length;
        if (rows <= 0) {
            return false;
        }
        int cols = mat[0].length;
        // 某一列遇到0值用前一行值覆盖, 先对列处理
        for (int j = 0; j < cols; ++j) {
            // 从第二行开始处理
            for (int i = 1; i < rows; ++i) {
                if ("0".equals(mat[i][j])) {
                    // 如果某一列现在值为0，且上一行对应值不为0，上一行值给这一行
                    mat[i][j] = mat[i - 1][j];
                }
            }
        }
        // 倒序来一轮，防止前面很多行都是0，靠后面的把前面的补全了, 先对列处理
//        for (int j = 0; j < cols; ++j) {
//            // 从倒数第二行开始处理, 并且要处理0行
//            for (int i = rows - 2; i >= 0; --i) {
//                if ("0".equals(mat[i][j])) {
//                    mat[i][j] = mat[i + 1][j];
//                }
//            }
//        }
        // 来一轮前后差值的，滤除突变点, 先对列处理
//        for (int j = 0; j < cols; ++j) {
//            // 从第二行开始处理
//            for (int i = 1; i < rows; ++i) {
//                // 前后波动2以上
//                if (abs(Double.valueOf(mat[i][j]) - Double.valueOf(mat[i - 1][j])) > 2) {
//                    mat[i][j] = mat[i - 1][j];
//                }
//            }
//        }
        return true;
    }

//    public static void main(String[] args) {
//        String[][] mat = {{"0","0","0"},{"1","2","3"},{"0","0","0"}};
//        dataClean(mat);
//        show(mat);
//        System.out.println("000" );
//    }
}
